using System;
using System.Collections.Generic;
using System.Text;

using RRHH.Competencias.DataAccessLayer.Generic;
using RRHH.Competencias.DataAccessLayer;
using RRHH.Competencias.Entities;
using RRHH.Competencias.BusinessLayer;

namespace RRHH.Competencias.Controladores
{
    public class GestorCurso
    {
        private IDALCurso persistencia;
        private string empresa;

        public GestorCurso()
        {
            try
            {
                persistencia = DALProvider.GetDALCurso();                
            }
            catch (Exception ex)
            {
                throw new DALException(ex.Message);
            }
        }

        public List<Curso> Buscar(long? curso_id, string nombre, string descripcion, long? tipoCurso
                                 , long? responsableDictado, long? responsablePropuesta,
                                  DateTime? fechaInicio, DateTime? fechaFin, bool soloActivo)
        {
            try
            {
                //return persistencia.Buscar(curso_id, nombre, descripcion, tipoCurso, responsableDictado, responsablePropuesta, fechaInicio, fechaFin, soloActivo);

                List<Curso> cursos = persistencia.Buscar(curso_id, nombre, descripcion, tipoCurso, responsableDictado,
                                             responsablePropuesta, fechaInicio, fechaFin, soloActivo);

                GestorColaborador gestorColaborador = new GestorColaborador();
                GestorPersona gestorPersona = new GestorPersona();

                foreach (Curso curso in cursos)
                {
                    gestorColaborador.Completar(curso.ResponsablePropuesta);
                    gestorPersona.Completar(curso.ResponsableDictado);
                }

                return cursos;
            }
            catch (Exception ex)
            {
                throw new DALException(ex.Message);
            }
        }

        public void Completar(Curso itemCompletar)
        {
            try 
            {
                persistencia.Completar(itemCompletar);

                GestorCapacidadCurso gestorCapacidadCurso = new GestorCapacidadCurso();
                List<CapacidadCurso> lsCapacidades = gestorCapacidadCurso.Buscar(itemCompletar.Id, null, null, null, null);
                
                //Se completan los datos de la capacidad
                foreach (CapacidadCurso capacidadCurso in lsCapacidades)
                {
                    gestorCapacidadCurso.Completar(capacidadCurso);
                    itemCompletar.AgregarCapacidad(capacidadCurso);
                }
            }
	        catch (Exception ex)
	        {        		
		        throw ex;
	        }
            
        }

        public void Modificar(Curso itemModificar)
        {
            try
            {
                persistencia.Actualizar(itemModificar);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Registrar(Curso itemInsertar)
        {
            try
            {
                persistencia.Guardar(itemInsertar);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Desactivar(Curso item)
        {
            try
            {
                persistencia.Desactivar(item);
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }

        public void Activar(Curso item)
        {
            try
            {
                persistencia.Activar(item);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    }
}
